package com.cn.netty;

import io.netty.channel.DefaultEventLoop;
import io.netty.channel.EventLoop;
import io.netty.channel.EventLoopGroup;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ThreadUtils;
import org.junit.Test;

@Slf4j
public class EventLoopDemo {

    @Test
    public void test1() {
        //单线程
        EventLoop eventLoop = new DefaultEventLoop();
        //DefaultPromise 对象。创建该对象时 EventLoop 已经跟该对象绑定了。
        Future<?> defaultPromise = eventLoop.submit(new Runnable() {
            @Override
            public void run() {
                sleep(10000);
                log.info("hello nice to meet you");
            }
        });
        // 主任务如果完成了。那么通过DefaultPromise 的 setSuccess() 方法,唤醒 回调方法。回调方法所在线程就是 DefaultPromise 对象 所绑定的线程
        defaultPromise.addListener(new GenericFutureListener() {
                               @Override
                               public void operationComplete(Future future) throws Exception {
                                   log.info("hello world");
                               }
                           }
        );
        sleep(600000);
        log.info("done");
    }

    @Test
    public void test2() {

    }

    public static void sleep(long millis) {
        try {
            Thread.sleep(millis);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


}
